﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;

namespace Jurassic_Island
{
    public class ENJugadores
    {
        private string jugador;
        private string password;
        private string email;
        private SqlDateTime fechanac;
        private char sexo;
        private string nombre;
        private string apellidos;
        private string avatar;

        private CADJugadores cadJugadores = new CADJugadores();
        private string nombreTabla = "Jugadores";

        public ENJugadores()
        {
            jugador = password = email = nombre = apellidos = avatar = "";
            fechanac = SqlDateTime.MinValue;
            sexo = '0';
        }

        public ENJugadores(string param_jugador, string param_password)
        {
            jugador = param_jugador;
            password = param_password;
            email = nombre = apellidos = avatar = "";
            fechanac = SqlDateTime.MinValue;
            sexo = '0';
        }

        public bool RegistrarJugador()
        {
            bool resultado = false;

            try
            {
                ENJugadores enjug = new ENJugadores();
                enjug = enjug.ObtenerJugador(jugador);
                if (enjug.jugador == jugador)
                    resultado = false;
            }
            catch (Exception)
            {
                try
                {
                    DataSet dsJugador = cadJugadores.ObtenerTablaJugadores();

                    DataRow dr;
                    dr = dsJugador.Tables["Jugadores"].NewRow();

                    dr["jugador_jug"] = jugador;
                    dr["password_jug"] = password;
                    dr["email_jug"] = email;
                    dr["fechanac_jug"] = new DateTime(fechanac.Value.Year, fechanac.Value.Month, fechanac.Value.Day);
                    dr["sexo_jug"] = sexo.ToString();
                    dr["nombre_jug"] = nombre;
                    dr["apellidos_jug"] = apellidos;
                    dr["avatar_jug"] = avatar;

                    dsJugador.Tables["Jugadores"].Rows.Add(dr);

                    resultado = cadJugadores.ActualizarTablaJugadores(dsJugador);
                }
                catch (Exception exc)
                {
                    throw (exc);
                }
            }

            return resultado;
        }

        public bool ActualizarJugador()
        {
            bool salida = false;

            try
            {
                DataSet dsJugadores = ObtenerListaJugadores();
                DataRow drJugador = dsJugadores.Tables[nombreTabla].Rows.Find(Jugador);
                drJugador["jugador_jug"] = Jugador;
                drJugador["password_jug"] = Password;
                drJugador["email_jug"] = Email;
                drJugador["fechanac_jug"] = new DateTime(fechanac.Value.Year, fechanac.Value.Month, fechanac.Value.Day);
                drJugador["sexo_jug"] = Sexo.ToString();
                drJugador["nombre_jug"] = Nombre;
                drJugador["apellidos_jug"] = Apellidos;
                drJugador["avatar_jug"] = Avatar;
                cadJugadores.ActualizarTablaJugadores(dsJugadores);
                salida = true;
            }
            catch (Exception)
            {
                salida = false;
            }

            return salida;
        }

        public DataSet ObtenerListaJugadores()
        {
            DataSet resultado = new DataSet();
            try
            {
                resultado = cadJugadores.ObtenerTablaJugadores();
            }
            catch (Exception ex)
            {
                throw (ex);
            }

            return resultado;
        }

        public ENJugadores ObtenerJugador(String jugador)
        {

            DataSet dsJugadores = new DataSet();
            ENJugadores enJug = new ENJugadores();

            try
            {
                dsJugadores = cadJugadores.ObtenerTablaJugadores();
                if (dsJugadores.Tables["Jugadores"].Rows.Count > 0)
                {
                    DataRow drJug = dsJugadores.Tables["Jugadores"].Rows.Find(jugador);
                    try
                    {
                        enJug.jugador = drJug["jugador_jug"].ToString();
                        enJug.password = drJug["password_jug"].ToString();
                        enJug.email = drJug["email_jug"].ToString();
                        DateTime dtNac = DateTime.Parse(drJug["fechanac_jug"].ToString());
                        enJug.fechanac = new SqlDateTime(dtNac.Year,dtNac.Month,dtNac.Day);
                        enJug.sexo = char.Parse(drJug["sexo_jug"].ToString());
                        enJug.nombre = drJug["nombre_jug"].ToString();
                        enJug.apellidos = drJug["apellidos_jug"].ToString();
                        enJug.avatar = drJug["avatar_jug"].ToString();
                    }
                    catch (Exception ex)
                    {
                        ex = new Exception("El jugador no existe");
                        throw (ex);
                    }
                }
            }

            catch (Exception ex)
            {
                throw (ex);
            }

            return enJug;
        }

        public bool EliminarJugador()
        {
            bool resultado = false;

            try
            {
                DataSet dsJugador = cadJugadores.ObtenerTablaJugadores();

                dsJugador.Tables[nombreTabla].Rows.Find(jugador).Delete();

                resultado = cadJugadores.ActualizarTablaJugadores(dsJugador);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return resultado;
        }

        public string Jugador
        {
            get { return jugador; }
            set { jugador = value; }
        }

        public string Password
        {
            get { return password; }
            set { password = value; }
        }

        public string Email
        {
            get { return email; }
            set { email = value; }
        }

        public SqlDateTime Fechanac
        {
            get { return fechanac; }
            set { fechanac = value; }
        }

        public char Sexo
        {
            get { return sexo; }
            set { sexo = value; }
        }

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public string Apellidos
        {
            get { return apellidos; }
            set { apellidos = value; }
        }

        public string Avatar
        {
            get { return avatar; }
            set { avatar = value; }
        }
    }
}
